#pragma once
//数据库连接类，负责打开数据库连接和执行具体的sql语句

#include "msql_global.h"
#include "MSqlDefines.h"

#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QSqlRecord>
#include <QSqlDriver>
#include <QSqlField>
#include <QDebug>
#include <QList>

namespace NsMSql
{
	class MSqlConnection
	{
	public:
		MSqlConnection(const MSqlServerAttr& sqlServerAttr = MSqlServerAttr());
		bool operator==(const MSqlConnection& other);
	public:		//使用默认连接处理，先于数据库创建之前的不需要执行命令的操作
		//打开服务器
		bool openServer();
	public:
		//打开数据库连接
		bool openConnection(const QString& connectionName);
		//关闭数据库连接
		void closeConnection();
		//删除数据库连接（从连接列表里删除数据库连接）
		void removeConnection();
		//获取连接名称
		QString getConnectionName();
	public:
		//执行无返回数据的sql命令字符串，useDefaultConnection为是否使用全局默认连接，默认不使用
		bool execWithoutRes(const QString& sqlCmd, bool useDefaultConnection = false);
		//执行有返回数据的sql命令字符串
		QSqlQuery execWithRes(const QString& sqlCmd, bool useDefaultConnection = false);
	public:
		//根据数据类型获取数据类型字符串名
		QString getDataTypeStr(MFieldDataType dataType);
	private:
		static QMap<QString, QSqlDatabase> m_defaultDbMap;		//<数据库驱动名称,全局默认连接>

		MSqlServerAttr m_sqlServerAttr;
		QSqlDatabase m_db;
		QString m_driverName;	//数据库驱动名称
	};
}

